package com.google.code.easyparking.metier;

import java.util.Date;

/**
 * Place de parking gérant la présence d'une voiture.
 * @author Arnaud Versini
 *
 */
public class PlaceParking implements IPlaceParking{
	
	/**
	 * Numero de place de parking.
	 */
	private final int numeroPlace ;
	
	/**
	 * Véhicule actuel ou null si place libre.
	 */
	private VehiculeActuel vehiculeActuel;
	
	@Override
	public IVehicule getVehiculeActuel() {
		IVehicule vehiculeActuel = null;
		if (this.vehiculeActuel != null)
			vehiculeActuel = this.vehiculeActuel.vehicule;
		return vehiculeActuel;
	}

	private double longeur;
	private double hauteur;
	
	public static class VehiculeActuel {
		

		private final Date arrive;
		private final IVehicule vehicule;
		
		private VehiculeActuel(final Date arrive, final IVehicule vehicule) {
			this.arrive = arrive;
			this.vehicule = vehicule;
		}
	}
	
	public PlaceParking(int numeroPlace) {
		this(numeroPlace, DEFAULT_LONGEUR, DEFAULT_HAUTEUR);
	}
	
	public PlaceParking(int numeroPlace, double longeur, double hauteur) {
		this.longeur = longeur;
		this.hauteur = hauteur;
		this.numeroPlace = numeroPlace;
	}
	
	/**
	 * Getter du numero de place.
	 * @return Numero de place
	 */
	@Override
	public int getNumeroPlace() {
		return numeroPlace;
	}
	
	/**
	 * Vérification de la libreattitude de la place.
	 * @return true si la place est libre
	 */
	public boolean isFree() {
		return vehiculeActuel == null;		
	}
	
	/**
	 * Libération de la place de parking.
	 */
	@Override
	public void libererPlace() {
		vehiculeActuel = null ;
	}
	
	public boolean isRentrable(IVehicule vehicule) {
		//if (vehicule )
		return true;
	}
	/**
	 * Attribution de la place au véhicule en paramétre.
	 * @param vehicule Le véhicule à attribuer
	 */
	public void attribuerVehicule(IVehicule vehicule) {
		vehiculeActuel = new VehiculeActuel(new Date(), vehicule);
	}

	@Override
	public double getLongeur () {
		return longeur;
	}
	
	@Override
	public double getHauteur () {
		return hauteur;
	}
	
	@Override
	public Date getDateArriveVehicule() {
		Date dateArrive = null;
		if (vehiculeActuel != null) {
			dateArrive = vehiculeActuel.arrive;
		}
		return dateArrive;
	}
	
}
